package src.F_CollectionFramework;

import src.C_io.Demo13_Student;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

// Collection接口中方法测试（通用于list和set子接口）
public class F01_Collection {
    public static void main(String[] args) {
        Collection collection = new ArrayList();
        Collection coll1 = new ArrayList();
        Collection coll2 = new ArrayList();

        collection.add(123); // 自动装箱
        collection.add("lele");
        collection.add(new Object());
        collection.add(new Demo13_Student(true,18,"lele",'男'));
        System.out.println(collection);

        coll1.add(collection); // 把collection当成一个元素添加到coll1里
        coll1.add("coll");
        System.out.println(coll1);
        System.out.println(coll1.size());
        coll2.addAll(collection); // 把collection里的每一个元素添加到coll1里
        coll2.add("coll");
        System.out.println(coll2);
        System.out.println(coll2.size());

        System.out.println(collection.isEmpty()); // 判断集合是否为空（底层是判断size是否为0）
        System.out.println(collection.contains(123)); // 是否包含该元素
        System.out.println(coll2.containsAll(collection)); // 是否包含该集合中的所有元素

        collection.clear(); // 清除集合中所有元素
        System.out.println(collection);

        coll1.remove(collection); // 删除指定元素
        System.out.println(coll1);

        Iterator iterator = coll2.iterator(); // 迭代器（foreach底层实现也是迭代器）
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

    }
}

/*
Collections工具类常用方法
一、用于排序的相关方法
1、void shuffle(List list)  随机排序
2、void sort(List list)  自然排序按升序排序
3、void sort(List list, Comparator c)  自定义排序，由Comparator来制定排序的逻辑
4、void swap(List list, int i , int j)  交换指定索引位置的元素
二、用于查找替换的相关方法
1、int max(Collection coll)  根据自然排序，返回最大值
2、int max(Collection coll, Comparator c)   根据自定义排序，返回最大值
3、int min（Collectiion coll）根据自然排序，返回最小值
4、void fill(List list, Object obj)   用指定的元素代替指定list中的所有元素
5、boolean replaceAll(List list, Object oldVal, Object newVal)   替换所有元素
6、int binarySearch(List list, Object key)   二分查找 ，返回索引值，List需要为有序的
*/